/* * Copyright (C) 2005-2012 Team XBMC * http://xbmc.org * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with XBMC Remote; see the file license. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * http://www.gnu.org/copyleft/gpl.html * */ package org.xbmc.android.jsonrpc.api.model; import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.ObjectNode; import org.xbmc.android.jsonrpc.api.AbstractModel; public final class VideoModel { /** * API Name: <tt>null</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Cast extends AbstractModel { // field names public static final String NAME = "name"; public static final String ROLE = "role"; public static final String THUMBNAIL = "thumbnail"; // class members public final String name; public final String role; public final String thumbnail; /** * @param name * @param role * @param thumbnail */ public Cast(String name, String role, String thumbnail) { this.name = name; this.role = role; this.thumbnail = thumbnail; } /** * Construct from JSON object. * @param node JSON object representing a Cast object */ public Cast(JsonNode node) { name = node.get(NAME).getTextValue(); // required value role = node.get(ROLE).getTextValue(); // required value thumbnail = parseString(node, THUMBNAIL); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); node.put(NAME, name); node.put(ROLE, role); node.put(THUMBNAIL, thumbnail); return node; } /** * Extracts a list of {@link Cast} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Cast> getVideoModelCastList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Cast> l = new ArrayList<Cast>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Cast((JsonNode)a.get(i))); } return l; } return new ArrayList<Cast>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeValue(name); parcel.writeValue(role); parcel.writeValue(thumbnail); } /** * Construct via parcel. */ protected Cast(Parcel parcel) { name = parcel.readString(); role = parcel.readString(); thumbnail = parcel.readString(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Cast> CREATOR = new Parcelable.Creator<Cast>() { @Override public Cast createFromParcel(Parcel parcel) { return new Cast(parcel); } @Override public Cast[] newArray(int n) { return new Cast[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Base</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class BaseDetail extends MediaModel.BaseDetail { public final static String API_TYPE = "Video.Details.Base"; // field names public static final String ART = "art"; public static final String PLAYCOUNT = "playcount"; // class members public final MediaModel.Artwork art; public final Integer playcount; /** * Construct from JSON object. * @param node JSON object representing a BaseDetail object */ public BaseDetail(JsonNode node) { super(node); art = node.has(ART) ? new MediaModel.Artwork(node.get(ART)) : null; playcount = parseInt(node, PLAYCOUNT); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(ART, art.toJsonNode()); node.put(PLAYCOUNT, playcount); return node; } /** * Extracts a list of {@link BaseDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<BaseDetail> getVideoModelBaseDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<BaseDetail> l = new ArrayList<BaseDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new BaseDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<BaseDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(art); parcel.writeValue(playcount); } /** * Construct via parcel. */ protected BaseDetail(Parcel parcel) { super(parcel); art = parcel.<MediaModel.Artwork>readParcelable(MediaModel.Artwork.class.getClassLoader()); playcount = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<BaseDetail> CREATOR = new Parcelable.Creator<BaseDetail>() { @Override public BaseDetail createFromParcel(Parcel parcel) { return new BaseDetail(parcel); } @Override public BaseDetail[] newArray(int n) { return new BaseDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Episode</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class EpisodeDetail extends FileDetail { public final static String API_TYPE = "Video.Details.Episode"; // field names public static final String CAST = "cast"; public static final String EPISODE = "episode"; public static final String EPISODEID = "episodeid"; public static final String FIRSTAIRED = "firstaired"; public static final String ORIGINALTITLE = "originaltitle"; public static final String PRODUCTIONCODE = "productioncode"; public static final String RATING = "rating"; public static final String SEASON = "season"; public static final String SHOWTITLE = "showtitle"; public static final String TVSHOWID = "tvshowid"; public static final String UNIQUEID = "uniqueid"; public static final String VOTES = "votes"; public static final String WRITER = "writer"; // class members public final List<Cast> cast; public final Integer episode; public final Integer episodeid; public final String firstaired; public final String originaltitle; public final String productioncode; public final Double rating; public final Integer season; public final String showtitle; public final Integer tvshowid; public final HashMap<String, String> uniqueid; public final String votes; public final List<String> writer; /** * Construct from JSON object. * @param node JSON object representing a EpisodeDetail object */ public EpisodeDetail(JsonNode node) { super(node); cast = Cast.getVideoModelCastList(node, CAST); episode = parseInt(node, EPISODE); episodeid = parseInt(node, EPISODEID); firstaired = parseString(node, FIRSTAIRED); originaltitle = parseString(node, ORIGINALTITLE); productioncode = parseString(node, PRODUCTIONCODE); rating = parseDouble(node, RATING); season = parseInt(node, SEASON); showtitle = parseString(node, SHOWTITLE); tvshowid = parseInt(node, TVSHOWID); uniqueid = getStringMap(node, UNIQUEID); votes = parseString(node, VOTES); writer = getStringArray(node, WRITER); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); final ArrayNode castArray = OM.createArrayNode(); for (Cast item : cast) { castArray.add(item.toJsonNode()); } node.put(CAST, castArray); node.put(EPISODE, episode); node.put(EPISODEID, episodeid); node.put(FIRSTAIRED, firstaired); node.put(ORIGINALTITLE, originaltitle); node.put(PRODUCTIONCODE, productioncode); node.put(RATING, rating); node.put(SEASON, season); node.put(SHOWTITLE, showtitle); node.put(TVSHOWID, tvshowid); final ObjectNode uniqueidMap = OM.createObjectNode(); for (String key : uniqueid.values()) { uniqueidMap.put(key, uniqueid.get(key)); } node.put(UNIQUEID, uniqueidMap); node.put(VOTES, votes); final ArrayNode writerArray = OM.createArrayNode(); for (String item : writer) { writerArray.add(item); } node.put(WRITER, writerArray); return node; } /** * Extracts a list of {@link EpisodeDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<EpisodeDetail> getVideoModelEpisodeDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<EpisodeDetail> l = new ArrayList<EpisodeDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new EpisodeDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<EpisodeDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeInt(cast.size()); for (Cast item : cast) { parcel.writeParcelable(item, flags); } parcel.writeValue(episode); parcel.writeValue(episodeid); parcel.writeValue(firstaired); parcel.writeValue(originaltitle); parcel.writeValue(productioncode); parcel.writeValue(rating); parcel.writeValue(season); parcel.writeValue(showtitle); parcel.writeValue(tvshowid); parcel.writeInt(uniqueid.size()); for (String key : uniqueid.values()) { parcel.writeValue(key); parcel.writeValue(uniqueid.get(key)); } parcel.writeValue(votes); parcel.writeInt(writer.size()); for (String item : writer) { parcel.writeValue(item); } } /** * Construct via parcel. */ protected EpisodeDetail(Parcel parcel) { super(parcel); final int castSize = parcel.readInt(); cast = new ArrayList<Cast>(castSize); for (int i = 0; i < castSize; i++) { cast.add(parcel.<Cast>readParcelable(Cast.class.getClassLoader())); } episode = parcel.readInt(); episodeid = parcel.readInt(); firstaired = parcel.readString(); originaltitle = parcel.readString(); productioncode = parcel.readString(); rating = parcel.readDouble(); season = parcel.readInt(); showtitle = parcel.readString(); tvshowid = parcel.readInt(); final int uniqueidSize = parcel.readInt(); uniqueid = new HashMap<String, String>(); for (int i = 0; i < uniqueidSize; i++) { uniqueid.put(parcel.readString(), parcel.readString()); } votes = parcel.readString(); final int writerSize = parcel.readInt(); writer = new ArrayList<String>(writerSize); for (int i = 0; i < writerSize; i++) { writer.add(parcel.readString()); } } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<EpisodeDetail> CREATOR = new Parcelable.Creator<EpisodeDetail>() { @Override public EpisodeDetail createFromParcel(Parcel parcel) { return new EpisodeDetail(parcel); } @Override public EpisodeDetail[] newArray(int n) { return new EpisodeDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.File</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class FileDetail extends ItemDetail { public final static String API_TYPE = "Video.Details.File"; // field names public static final String DIRECTOR = "director"; public static final String RESUME = "resume"; public static final String RUNTIME = "runtime"; public static final String STREAMDETAILS = "streamdetails"; // class members public final List<String> director; public final Resume resume; public final Integer runtime; public final Streams streamdetails; /** * Construct from JSON object. * @param node JSON object representing a FileDetail object */ public FileDetail(JsonNode node) { super(node); director = getStringArray(node, DIRECTOR); resume = node.has(RESUME) ? new Resume(node.get(RESUME)) : null; runtime = parseInt(node, RUNTIME); streamdetails = node.has(STREAMDETAILS) ? new Streams(node.get(STREAMDETAILS)) : null; } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); final ArrayNode directorArray = OM.createArrayNode(); for (String item : director) { directorArray.add(item); } node.put(DIRECTOR, directorArray); node.put(RESUME, resume.toJsonNode()); node.put(RUNTIME, runtime); node.put(STREAMDETAILS, streamdetails.toJsonNode()); return node; } /** * Extracts a list of {@link FileDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<FileDetail> getVideoModelFileDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<FileDetail> l = new ArrayList<FileDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new FileDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<FileDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeInt(director.size()); for (String item : director) { parcel.writeValue(item); } parcel.writeValue(resume); parcel.writeValue(runtime); parcel.writeValue(streamdetails); } /** * Construct via parcel. */ protected FileDetail(Parcel parcel) { super(parcel); final int directorSize = parcel.readInt(); director = new ArrayList<String>(directorSize); for (int i = 0; i < directorSize; i++) { director.add(parcel.readString()); } resume = parcel.<Resume>readParcelable(Resume.class.getClassLoader()); runtime = parcel.readInt(); streamdetails = parcel.<Streams>readParcelable(Streams.class.getClassLoader()); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<FileDetail> CREATOR = new Parcelable.Creator<FileDetail>() { @Override public FileDetail createFromParcel(Parcel parcel) { return new FileDetail(parcel); } @Override public FileDetail[] newArray(int n) { return new FileDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Item</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class ItemDetail extends MediaDetail { public final static String API_TYPE = "Video.Details.Item"; // field names public static final String DATEADDED = "dateadded"; public static final String FILE = "file"; public static final String LASTPLAYED = "lastplayed"; public static final String PLOT = "plot"; // class members public final String dateadded; public final String file; public final String lastplayed; public final String plot; /** * Construct from JSON object. * @param node JSON object representing a ItemDetail object */ public ItemDetail(JsonNode node) { super(node); dateadded = parseString(node, DATEADDED); file = parseString(node, FILE); lastplayed = parseString(node, LASTPLAYED); plot = parseString(node, PLOT); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(DATEADDED, dateadded); node.put(FILE, file); node.put(LASTPLAYED, lastplayed); node.put(PLOT, plot); return node; } /** * Extracts a list of {@link ItemDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<ItemDetail> getVideoModelItemDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<ItemDetail> l = new ArrayList<ItemDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new ItemDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<ItemDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(dateadded); parcel.writeValue(file); parcel.writeValue(lastplayed); parcel.writeValue(plot); } /** * Construct via parcel. */ protected ItemDetail(Parcel parcel) { super(parcel); dateadded = parcel.readString(); file = parcel.readString(); lastplayed = parcel.readString(); plot = parcel.readString(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<ItemDetail> CREATOR = new Parcelable.Creator<ItemDetail>() { @Override public ItemDetail createFromParcel(Parcel parcel) { return new ItemDetail(parcel); } @Override public ItemDetail[] newArray(int n) { return new ItemDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Media</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class MediaDetail extends BaseDetail { public final static String API_TYPE = "Video.Details.Media"; // field names public static final String TITLE = "title"; // class members public final String title; /** * Construct from JSON object. * @param node JSON object representing a MediaDetail object */ public MediaDetail(JsonNode node) { super(node); title = parseString(node, TITLE); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(TITLE, title); return node; } /** * Extracts a list of {@link MediaDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<MediaDetail> getVideoModelMediaDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<MediaDetail> l = new ArrayList<MediaDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new MediaDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<MediaDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(title); } /** * Construct via parcel. */ protected MediaDetail(Parcel parcel) { super(parcel); title = parcel.readString(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<MediaDetail> CREATOR = new Parcelable.Creator<MediaDetail>() { @Override public MediaDetail createFromParcel(Parcel parcel) { return new MediaDetail(parcel); } @Override public MediaDetail[] newArray(int n) { return new MediaDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Movie</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class MovieDetail extends FileDetail { public final static String API_TYPE = "Video.Details.Movie"; // field names public static final String CAST = "cast"; public static final String COUNTRY = "country"; public static final String GENRE = "genre"; public static final String IMDBNUMBER = "imdbnumber"; public static final String MOVIEID = "movieid"; public static final String MPAA = "mpaa"; public static final String ORIGINALTITLE = "originaltitle"; public static final String PLOTOUTLINE = "plotoutline"; public static final String RATING = "rating"; public static final String SET = "set"; public static final String SETID = "setid"; public static final String SHOWLINK = "showlink"; public static final String SORTTITLE = "sorttitle"; public static final String STUDIO = "studio"; public static final String TAG = "tag"; public static final String TAGLINE = "tagline"; public static final String TOP250 = "top250"; public static final String TRAILER = "trailer"; public static final String VOTES = "votes"; public static final String WRITER = "writer"; public static final String YEAR = "year"; // class members public final List<Cast> cast; public final List<String> country; public final List<String> genre; public final String imdbnumber; public final Integer movieid; public final String mpaa; public final String originaltitle; public final String plotoutline; public final Double rating; public final String set; public final Integer setid; public final List<String> showlink; public final String sorttitle; public final List<String> studio; public final List<String> tag; public final String tagline; public final Integer top250; public final String trailer; public final String votes; public final List<String> writer; public final Integer year; /** * Construct from JSON object. * @param node JSON object representing a MovieDetail object */ public MovieDetail(JsonNode node) { super(node); cast = Cast.getVideoModelCastList(node, CAST); country = getStringArray(node, COUNTRY); genre = getStringArray(node, GENRE); imdbnumber = parseString(node, IMDBNUMBER); movieid = parseInt(node, MOVIEID); mpaa = parseString(node, MPAA); originaltitle = parseString(node, ORIGINALTITLE); plotoutline = parseString(node, PLOTOUTLINE); rating = parseDouble(node, RATING); set = parseString(node, SET); setid = parseInt(node, SETID); showlink = getStringArray(node, SHOWLINK); sorttitle = parseString(node, SORTTITLE); studio = getStringArray(node, STUDIO); tag = getStringArray(node, TAG); tagline = parseString(node, TAGLINE); top250 = parseInt(node, TOP250); trailer = parseString(node, TRAILER); votes = parseString(node, VOTES); writer = getStringArray(node, WRITER); year = parseInt(node, YEAR); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); final ArrayNode castArray = OM.createArrayNode(); for (Cast item : cast) { castArray.add(item.toJsonNode()); } node.put(CAST, castArray); final ArrayNode countryArray = OM.createArrayNode(); for (String item : country) { countryArray.add(item); } node.put(COUNTRY, countryArray); final ArrayNode genreArray = OM.createArrayNode(); for (String item : genre) { genreArray.add(item); } node.put(GENRE, genreArray); node.put(IMDBNUMBER, imdbnumber); node.put(MOVIEID, movieid); node.put(MPAA, mpaa); node.put(ORIGINALTITLE, originaltitle); node.put(PLOTOUTLINE, plotoutline); node.put(RATING, rating); node.put(SET, set); node.put(SETID, setid); final ArrayNode showlinkArray = OM.createArrayNode(); for (String item : showlink) { showlinkArray.add(item); } node.put(SHOWLINK, showlinkArray); node.put(SORTTITLE, sorttitle); final ArrayNode studioArray = OM.createArrayNode(); for (String item : studio) { studioArray.add(item); } node.put(STUDIO, studioArray); final ArrayNode tagArray = OM.createArrayNode(); for (String item : tag) { tagArray.add(item); } node.put(TAG, tagArray); node.put(TAGLINE, tagline); node.put(TOP250, top250); node.put(TRAILER, trailer); node.put(VOTES, votes); final ArrayNode writerArray = OM.createArrayNode(); for (String item : writer) { writerArray.add(item); } node.put(WRITER, writerArray); node.put(YEAR, year); return node; } /** * Extracts a list of {@link MovieDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<MovieDetail> getVideoModelMovieDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<MovieDetail> l = new ArrayList<MovieDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new MovieDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<MovieDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeInt(cast.size()); for (Cast item : cast) { parcel.writeParcelable(item, flags); } parcel.writeInt(country.size()); for (String item : country) { parcel.writeValue(item); } parcel.writeInt(genre.size()); for (String item : genre) { parcel.writeValue(item); } parcel.writeValue(imdbnumber); parcel.writeValue(movieid); parcel.writeValue(mpaa); parcel.writeValue(originaltitle); parcel.writeValue(plotoutline); parcel.writeValue(rating); parcel.writeValue(set); parcel.writeValue(setid); parcel.writeInt(showlink.size()); for (String item : showlink) { parcel.writeValue(item); } parcel.writeValue(sorttitle); parcel.writeInt(studio.size()); for (String item : studio) { parcel.writeValue(item); } parcel.writeInt(tag.size()); for (String item : tag) { parcel.writeValue(item); } parcel.writeValue(tagline); parcel.writeValue(top250); parcel.writeValue(trailer); parcel.writeValue(votes); parcel.writeInt(writer.size()); for (String item : writer) { parcel.writeValue(item); } parcel.writeValue(year); } /** * Construct via parcel. */ protected MovieDetail(Parcel parcel) { super(parcel); final int castSize = parcel.readInt(); cast = new ArrayList<Cast>(castSize); for (int i = 0; i < castSize; i++) { cast.add(parcel.<Cast>readParcelable(Cast.class.getClassLoader())); } final int countrySize = parcel.readInt(); country = new ArrayList<String>(countrySize); for (int i = 0; i < countrySize; i++) { country.add(parcel.readString()); } final int genreSize = parcel.readInt(); genre = new ArrayList<String>(genreSize); for (int i = 0; i < genreSize; i++) { genre.add(parcel.readString()); } imdbnumber = parcel.readString(); movieid = parcel.readInt(); mpaa = parcel.readString(); originaltitle = parcel.readString(); plotoutline = parcel.readString(); rating = parcel.readDouble(); set = parcel.readString(); setid = parcel.readInt(); final int showlinkSize = parcel.readInt(); showlink = new ArrayList<String>(showlinkSize); for (int i = 0; i < showlinkSize; i++) { showlink.add(parcel.readString()); } sorttitle = parcel.readString(); final int studioSize = parcel.readInt(); studio = new ArrayList<String>(studioSize); for (int i = 0; i < studioSize; i++) { studio.add(parcel.readString()); } final int tagSize = parcel.readInt(); tag = new ArrayList<String>(tagSize); for (int i = 0; i < tagSize; i++) { tag.add(parcel.readString()); } tagline = parcel.readString(); top250 = parcel.readInt(); trailer = parcel.readString(); votes = parcel.readString(); final int writerSize = parcel.readInt(); writer = new ArrayList<String>(writerSize); for (int i = 0; i < writerSize; i++) { writer.add(parcel.readString()); } year = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<MovieDetail> CREATOR = new Parcelable.Creator<MovieDetail>() { @Override public MovieDetail createFromParcel(Parcel parcel) { return new MovieDetail(parcel); } @Override public MovieDetail[] newArray(int n) { return new MovieDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.MovieSet</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class MovieSetDetail extends MediaDetail { public final static String API_TYPE = "Video.Details.MovieSet"; // field names public static final String SETID = "setid"; // class members public final Integer setid; /** * Construct from JSON object. * @param node JSON object representing a MovieSetDetail object */ public MovieSetDetail(JsonNode node) { super(node); setid = parseInt(node, SETID); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(SETID, setid); return node; } /** * Extracts a list of {@link MovieSetDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<MovieSetDetail> getVideoModelMovieSetDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<MovieSetDetail> l = new ArrayList<MovieSetDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new MovieSetDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<MovieSetDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(setid); } /** * Construct via parcel. */ protected MovieSetDetail(Parcel parcel) { super(parcel); setid = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<MovieSetDetail> CREATOR = new Parcelable.Creator<MovieSetDetail>() { @Override public MovieSetDetail createFromParcel(Parcel parcel) { return new MovieSetDetail(parcel); } @Override public MovieSetDetail[] newArray(int n) { return new MovieSetDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.MovieSet.Extended</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class MovieSetExtendedDetail extends MovieSetDetail { public final static String API_TYPE = "Video.Details.MovieSet.Extended"; // field names public static final String LIMITS = "limits"; public static final String MOVIES = "movies"; // class members public final ListModel.LimitsReturned limits; public final List<MovieDetail> movies; /** * Construct from JSON object. * @param node JSON object representing a MovieSetExtendedDetail object */ public MovieSetExtendedDetail(JsonNode node) { super(node); limits = node.has(LIMITS) ? new ListModel.LimitsReturned(node.get(LIMITS)) : null; movies = MovieDetail.getVideoModelMovieDetailList(node, MOVIES); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(LIMITS, limits.toJsonNode()); final ArrayNode moviesArray = OM.createArrayNode(); for (MovieDetail item : movies) { moviesArray.add(item.toJsonNode()); } node.put(MOVIES, moviesArray); return node; } /** * Extracts a list of {@link MovieSetExtendedDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<MovieSetExtendedDetail> getVideoModelMovieSetExtendedDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<MovieSetExtendedDetail> l = new ArrayList<MovieSetExtendedDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new MovieSetExtendedDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<MovieSetExtendedDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(limits); parcel.writeInt(movies.size()); for (MovieDetail item : movies) { parcel.writeParcelable(item, flags); } } /** * Construct via parcel. */ protected MovieSetExtendedDetail(Parcel parcel) { super(parcel); limits = parcel.<ListModel.LimitsReturned>readParcelable(ListModel.LimitsReturned.class.getClassLoader()); final int moviesSize = parcel.readInt(); movies = new ArrayList<MovieDetail>(moviesSize); for (int i = 0; i < moviesSize; i++) { movies.add(parcel.<MovieDetail>readParcelable(MovieDetail.class.getClassLoader())); } } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<MovieSetExtendedDetail> CREATOR = new Parcelable.Creator<MovieSetExtendedDetail>() { @Override public MovieSetExtendedDetail createFromParcel(Parcel parcel) { return new MovieSetExtendedDetail(parcel); } @Override public MovieSetExtendedDetail[] newArray(int n) { return new MovieSetExtendedDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.MusicVideo</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class MusicVideoDetail extends FileDetail { public final static String API_TYPE = "Video.Details.MusicVideo"; // field names public static final String ALBUM = "album"; public static final String ARTIST = "artist"; public static final String GENRE = "genre"; public static final String MUSICVIDEOID = "musicvideoid"; public static final String STUDIO = "studio"; public static final String TAG = "tag"; public static final String TRACK = "track"; public static final String YEAR = "year"; // class members public final String album; public final List<String> artist; public final List<String> genre; public final Integer musicvideoid; public final List<String> studio; public final List<String> tag; public final Integer track; public final Integer year; /** * Construct from JSON object. * @param node JSON object representing a MusicVideoDetail object */ public MusicVideoDetail(JsonNode node) { super(node); album = parseString(node, ALBUM); artist = getStringArray(node, ARTIST); genre = getStringArray(node, GENRE); musicvideoid = parseInt(node, MUSICVIDEOID); studio = getStringArray(node, STUDIO); tag = getStringArray(node, TAG); track = parseInt(node, TRACK); year = parseInt(node, YEAR); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(ALBUM, album); final ArrayNode artistArray = OM.createArrayNode(); for (String item : artist) { artistArray.add(item); } node.put(ARTIST, artistArray); final ArrayNode genreArray = OM.createArrayNode(); for (String item : genre) { genreArray.add(item); } node.put(GENRE, genreArray); node.put(MUSICVIDEOID, musicvideoid); final ArrayNode studioArray = OM.createArrayNode(); for (String item : studio) { studioArray.add(item); } node.put(STUDIO, studioArray); final ArrayNode tagArray = OM.createArrayNode(); for (String item : tag) { tagArray.add(item); } node.put(TAG, tagArray); node.put(TRACK, track); node.put(YEAR, year); return node; } /** * Extracts a list of {@link MusicVideoDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<MusicVideoDetail> getVideoModelMusicVideoDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<MusicVideoDetail> l = new ArrayList<MusicVideoDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new MusicVideoDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<MusicVideoDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(album); parcel.writeInt(artist.size()); for (String item : artist) { parcel.writeValue(item); } parcel.writeInt(genre.size()); for (String item : genre) { parcel.writeValue(item); } parcel.writeValue(musicvideoid); parcel.writeInt(studio.size()); for (String item : studio) { parcel.writeValue(item); } parcel.writeInt(tag.size()); for (String item : tag) { parcel.writeValue(item); } parcel.writeValue(track); parcel.writeValue(year); } /** * Construct via parcel. */ protected MusicVideoDetail(Parcel parcel) { super(parcel); album = parcel.readString(); final int artistSize = parcel.readInt(); artist = new ArrayList<String>(artistSize); for (int i = 0; i < artistSize; i++) { artist.add(parcel.readString()); } final int genreSize = parcel.readInt(); genre = new ArrayList<String>(genreSize); for (int i = 0; i < genreSize; i++) { genre.add(parcel.readString()); } musicvideoid = parcel.readInt(); final int studioSize = parcel.readInt(); studio = new ArrayList<String>(studioSize); for (int i = 0; i < studioSize; i++) { studio.add(parcel.readString()); } final int tagSize = parcel.readInt(); tag = new ArrayList<String>(tagSize); for (int i = 0; i < tagSize; i++) { tag.add(parcel.readString()); } track = parcel.readInt(); year = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<MusicVideoDetail> CREATOR = new Parcelable.Creator<MusicVideoDetail>() { @Override public MusicVideoDetail createFromParcel(Parcel parcel) { return new MusicVideoDetail(parcel); } @Override public MusicVideoDetail[] newArray(int n) { return new MusicVideoDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.Season</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class SeasonDetail extends BaseDetail { public final static String API_TYPE = "Video.Details.Season"; // field names public static final String EPISODE = "episode"; public static final String SEASON = "season"; public static final String SHOWTITLE = "showtitle"; public static final String TVSHOWID = "tvshowid"; public static final String WATCHEDEPISODES = "watchedepisodes"; // class members public final Integer episode; public final Integer season; public final String showtitle; public final Integer tvshowid; public final Integer watchedepisodes; /** * Construct from JSON object. * @param node JSON object representing a SeasonDetail object */ public SeasonDetail(JsonNode node) { super(node); episode = parseInt(node, EPISODE); season = node.get(SEASON).getIntValue(); // required value showtitle = parseString(node, SHOWTITLE); tvshowid = parseInt(node, TVSHOWID); watchedepisodes = parseInt(node, WATCHEDEPISODES); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); node.put(EPISODE, episode); node.put(SEASON, season); node.put(SHOWTITLE, showtitle); node.put(TVSHOWID, tvshowid); node.put(WATCHEDEPISODES, watchedepisodes); return node; } /** * Extracts a list of {@link SeasonDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<SeasonDetail> getVideoModelSeasonDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<SeasonDetail> l = new ArrayList<SeasonDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new SeasonDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<SeasonDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeValue(episode); parcel.writeValue(season); parcel.writeValue(showtitle); parcel.writeValue(tvshowid); parcel.writeValue(watchedepisodes); } /** * Construct via parcel. */ protected SeasonDetail(Parcel parcel) { super(parcel); episode = parcel.readInt(); season = parcel.readInt(); showtitle = parcel.readString(); tvshowid = parcel.readInt(); watchedepisodes = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<SeasonDetail> CREATOR = new Parcelable.Creator<SeasonDetail>() { @Override public SeasonDetail createFromParcel(Parcel parcel) { return new SeasonDetail(parcel); } @Override public SeasonDetail[] newArray(int n) { return new SeasonDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Details.TVShow</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class TVShowDetail extends ItemDetail { public final static String API_TYPE = "Video.Details.TVShow"; // field names public static final String CAST = "cast"; public static final String EPISODE = "episode"; public static final String EPISODEGUIDE = "episodeguide"; public static final String GENRE = "genre"; public static final String IMDBNUMBER = "imdbnumber"; public static final String MPAA = "mpaa"; public static final String ORIGINALTITLE = "originaltitle"; public static final String PREMIERED = "premiered"; public static final String RATING = "rating"; public static final String SEASON = "season"; public static final String SORTTITLE = "sorttitle"; public static final String STUDIO = "studio"; public static final String TAG = "tag"; public static final String TVSHOWID = "tvshowid"; public static final String VOTES = "votes"; public static final String WATCHEDEPISODES = "watchedepisodes"; public static final String YEAR = "year"; // class members public final List<Cast> cast; public final Integer episode; public final String episodeguide; public final List<String> genre; public final String imdbnumber; public final String mpaa; public final String originaltitle; public final String premiered; public final Double rating; public final Integer season; public final String sorttitle; public final List<String> studio; public final List<String> tag; public final Integer tvshowid; public final String votes; public final Integer watchedepisodes; public final Integer year; /** * Construct from JSON object. * @param node JSON object representing a TVShowDetail object */ public TVShowDetail(JsonNode node) { super(node); cast = Cast.getVideoModelCastList(node, CAST); episode = parseInt(node, EPISODE); episodeguide = parseString(node, EPISODEGUIDE); genre = getStringArray(node, GENRE); imdbnumber = parseString(node, IMDBNUMBER); mpaa = parseString(node, MPAA); originaltitle = parseString(node, ORIGINALTITLE); premiered = parseString(node, PREMIERED); rating = parseDouble(node, RATING); season = parseInt(node, SEASON); sorttitle = parseString(node, SORTTITLE); studio = getStringArray(node, STUDIO); tag = getStringArray(node, TAG); tvshowid = parseInt(node, TVSHOWID); votes = parseString(node, VOTES); watchedepisodes = parseInt(node, WATCHEDEPISODES); year = parseInt(node, YEAR); } @Override public JsonNode toJsonNode() { final ObjectNode node = (ObjectNode)super.toJsonNode(); final ArrayNode castArray = OM.createArrayNode(); for (Cast item : cast) { castArray.add(item.toJsonNode()); } node.put(CAST, castArray); node.put(EPISODE, episode); node.put(EPISODEGUIDE, episodeguide); final ArrayNode genreArray = OM.createArrayNode(); for (String item : genre) { genreArray.add(item); } node.put(GENRE, genreArray); node.put(IMDBNUMBER, imdbnumber); node.put(MPAA, mpaa); node.put(ORIGINALTITLE, originaltitle); node.put(PREMIERED, premiered); node.put(RATING, rating); node.put(SEASON, season); node.put(SORTTITLE, sorttitle); final ArrayNode studioArray = OM.createArrayNode(); for (String item : studio) { studioArray.add(item); } node.put(STUDIO, studioArray); final ArrayNode tagArray = OM.createArrayNode(); for (String item : tag) { tagArray.add(item); } node.put(TAG, tagArray); node.put(TVSHOWID, tvshowid); node.put(VOTES, votes); node.put(WATCHEDEPISODES, watchedepisodes); node.put(YEAR, year); return node; } /** * Extracts a list of {@link TVShowDetail} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<TVShowDetail> getVideoModelTVShowDetailList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<TVShowDetail> l = new ArrayList<TVShowDetail>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new TVShowDetail((JsonNode)a.get(i))); } return l; } return new ArrayList<TVShowDetail>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeInt(cast.size()); for (Cast item : cast) { parcel.writeParcelable(item, flags); } parcel.writeValue(episode); parcel.writeValue(episodeguide); parcel.writeInt(genre.size()); for (String item : genre) { parcel.writeValue(item); } parcel.writeValue(imdbnumber); parcel.writeValue(mpaa); parcel.writeValue(originaltitle); parcel.writeValue(premiered); parcel.writeValue(rating); parcel.writeValue(season); parcel.writeValue(sorttitle); parcel.writeInt(studio.size()); for (String item : studio) { parcel.writeValue(item); } parcel.writeInt(tag.size()); for (String item : tag) { parcel.writeValue(item); } parcel.writeValue(tvshowid); parcel.writeValue(votes); parcel.writeValue(watchedepisodes); parcel.writeValue(year); } /** * Construct via parcel. */ protected TVShowDetail(Parcel parcel) { super(parcel); final int castSize = parcel.readInt(); cast = new ArrayList<Cast>(castSize); for (int i = 0; i < castSize; i++) { cast.add(parcel.<Cast>readParcelable(Cast.class.getClassLoader())); } episode = parcel.readInt(); episodeguide = parcel.readString(); final int genreSize = parcel.readInt(); genre = new ArrayList<String>(genreSize); for (int i = 0; i < genreSize; i++) { genre.add(parcel.readString()); } imdbnumber = parcel.readString(); mpaa = parcel.readString(); originaltitle = parcel.readString(); premiered = parcel.readString(); rating = parcel.readDouble(); season = parcel.readInt(); sorttitle = parcel.readString(); final int studioSize = parcel.readInt(); studio = new ArrayList<String>(studioSize); for (int i = 0; i < studioSize; i++) { studio.add(parcel.readString()); } final int tagSize = parcel.readInt(); tag = new ArrayList<String>(tagSize); for (int i = 0; i < tagSize; i++) { tag.add(parcel.readString()); } tvshowid = parcel.readInt(); votes = parcel.readString(); watchedepisodes = parcel.readInt(); year = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<TVShowDetail> CREATOR = new Parcelable.Creator<TVShowDetail>() { @Override public TVShowDetail createFromParcel(Parcel parcel) { return new TVShowDetail(parcel); } @Override public TVShowDetail[] newArray(int n) { return new TVShowDetail[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Resume</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Resume extends AbstractModel { public final static String API_TYPE = "Video.Resume"; // field names public static final String POSITION = "position"; public static final String TOTAL = "total"; // class members public final Double position; public final Double total; /** * @param position * @param total */ public Resume(Double position, Double total) { this.position = position; this.total = total; } /** * Construct from JSON object. * @param node JSON object representing a Resume object */ public Resume(JsonNode node) { position = parseDouble(node, POSITION); total = parseDouble(node, TOTAL); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); node.put(POSITION, position); node.put(TOTAL, total); return node; } /** * Extracts a list of {@link Resume} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Resume> getVideoModelResumeList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Resume> l = new ArrayList<Resume>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Resume((JsonNode)a.get(i))); } return l; } return new ArrayList<Resume>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeValue(position); parcel.writeValue(total); } /** * Construct via parcel. */ protected Resume(Parcel parcel) { position = parcel.readDouble(); total = parcel.readDouble(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Resume> CREATOR = new Parcelable.Creator<Resume>() { @Override public Resume createFromParcel(Parcel parcel) { return new Resume(parcel); } @Override public Resume[] newArray(int n) { return new Resume[n]; } }; @Override public int describeContents() { return 0; } } /** * API Name: <tt>Video.Streams</tt> * <p/> * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Streams extends AbstractModel { public final static String API_TYPE = "Video.Streams"; // field names public static final String AUDIO = "audio"; public static final String SUBTITLE = "subtitle"; public static final String VIDEO = "video"; // class members public final List<Audio> audio; public final List<Subtitle> subtitle; public final List<Video> video; /** * @param audio * @param subtitle * @param video */ public Streams(List<Audio> audio, List<Subtitle> subtitle, List<Video> video) { this.audio = audio; this.subtitle = subtitle; this.video = video; } /** * Construct from JSON object. * @param node JSON object representing a Streams object */ public Streams(JsonNode node) { audio = Audio.getVideoModelAudioList(node, AUDIO); subtitle = Subtitle.getVideoModelSubtitleList(node, SUBTITLE); video = Video.getVideoModelVideoList(node, VIDEO); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); final ArrayNode audioArray = OM.createArrayNode(); for (Audio item : audio) { audioArray.add(item.toJsonNode()); } node.put(AUDIO, audioArray); final ArrayNode subtitleArray = OM.createArrayNode(); for (Subtitle item : subtitle) { subtitleArray.add(item.toJsonNode()); } node.put(SUBTITLE, subtitleArray); final ArrayNode videoArray = OM.createArrayNode(); for (Video item : video) { videoArray.add(item.toJsonNode()); } node.put(VIDEO, videoArray); return node; } /** * Extracts a list of {@link Streams} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Streams> getVideoModelStreamsList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Streams> l = new ArrayList<Streams>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Streams((JsonNode)a.get(i))); } return l; } return new ArrayList<Streams>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(audio.size()); for (Audio item : audio) { parcel.writeParcelable(item, flags); } parcel.writeInt(subtitle.size()); for (Subtitle item : subtitle) { parcel.writeParcelable(item, flags); } parcel.writeInt(video.size()); for (Video item : video) { parcel.writeParcelable(item, flags); } } /** * Construct via parcel. */ protected Streams(Parcel parcel) { final int audioSize = parcel.readInt(); audio = new ArrayList<Audio>(audioSize); for (int i = 0; i < audioSize; i++) { audio.add(parcel.<Audio>readParcelable(Audio.class.getClassLoader())); } final int subtitleSize = parcel.readInt(); subtitle = new ArrayList<Subtitle>(subtitleSize); for (int i = 0; i < subtitleSize; i++) { subtitle.add(parcel.<Subtitle>readParcelable(Subtitle.class.getClassLoader())); } final int videoSize = parcel.readInt(); video = new ArrayList<Video>(videoSize); for (int i = 0; i < videoSize; i++) { video.add(parcel.<Video>readParcelable(Video.class.getClassLoader())); } } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Streams> CREATOR = new Parcelable.Creator<Streams>() { @Override public Streams createFromParcel(Parcel parcel) { return new Streams(parcel); } @Override public Streams[] newArray(int n) { return new Streams[n]; } }; @Override public int describeContents() { return 0; } /** * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Audio extends AbstractModel { // field names public static final String CHANNELS = "channels"; public static final String CODEC = "codec"; public static final String LANGUAGE = "language"; // class members public final Integer channels; public final String codec; public final String language; /** * @param channels * @param codec * @param language */ public Audio(Integer channels, String codec, String language) { this.channels = channels; this.codec = codec; this.language = language; } /** * Construct from JSON object. * @param node JSON object representing a Audio object */ public Audio(JsonNode node) { channels = parseInt(node, CHANNELS); codec = parseString(node, CODEC); language = parseString(node, LANGUAGE); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); node.put(CHANNELS, channels); node.put(CODEC, codec); node.put(LANGUAGE, language); return node; } /** * Extracts a list of {@link Audio} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Audio> getVideoModelAudioList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Audio> l = new ArrayList<Audio>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Audio((JsonNode)a.get(i))); } return l; } return new ArrayList<Audio>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeValue(channels); parcel.writeValue(codec); parcel.writeValue(language); } /** * Construct via parcel. */ protected Audio(Parcel parcel) { channels = parcel.readInt(); codec = parcel.readString(); language = parcel.readString(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Audio> CREATOR = new Parcelable.Creator<Audio>() { @Override public Audio createFromParcel(Parcel parcel) { return new Audio(parcel); } @Override public Audio[] newArray(int n) { return new Audio[n]; } }; @Override public int describeContents() { return 0; } } /** * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Subtitle extends AbstractModel { // field names public static final String LANGUAGE = "language"; // class members public final String language; /** * @param language */ public Subtitle(String language) { this.language = language; } /** * Construct from JSON object. * @param node JSON object representing a Subtitle object */ public Subtitle(JsonNode node) { language = parseString(node, LANGUAGE); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); node.put(LANGUAGE, language); return node; } /** * Extracts a list of {@link Subtitle} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Subtitle> getVideoModelSubtitleList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Subtitle> l = new ArrayList<Subtitle>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Subtitle((JsonNode)a.get(i))); } return l; } return new ArrayList<Subtitle>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeValue(language); } /** * Construct via parcel. */ protected Subtitle(Parcel parcel) { language = parcel.readString(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Subtitle> CREATOR = new Parcelable.Creator<Subtitle>() { @Override public Subtitle createFromParcel(Parcel parcel) { return new Subtitle(parcel); } @Override public Subtitle[] newArray(int n) { return new Subtitle[n]; } }; @Override public int describeContents() { return 0; } } /** * Note: This class is used as result only.<br/> * <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i> */ public static class Video extends AbstractModel { // field names public static final String ASPECT = "aspect"; public static final String CODEC = "codec"; public static final String DURATION = "duration"; public static final String HEIGHT = "height"; public static final String WIDTH = "width"; // class members public final Double aspect; public final String codec; public final Integer duration; public final Integer height; public final Integer width; /** * @param aspect * @param codec * @param duration * @param height * @param width */ public Video(Double aspect, String codec, Integer duration, Integer height, Integer width) { this.aspect = aspect; this.codec = codec; this.duration = duration; this.height = height; this.width = width; } /** * Construct from JSON object. * @param node JSON object representing a Video object */ public Video(JsonNode node) { aspect = parseDouble(node, ASPECT); codec = parseString(node, CODEC); duration = parseInt(node, DURATION); height = parseInt(node, HEIGHT); width = parseInt(node, WIDTH); } @Override public JsonNode toJsonNode() { final ObjectNode node = OM.createObjectNode(); node.put(ASPECT, aspect); node.put(CODEC, codec); node.put(DURATION, duration); node.put(HEIGHT, height); node.put(WIDTH, width); return node; } /** * Extracts a list of {@link Video} objects from a JSON array. * @param obj ObjectNode containing the list of objects. * @param key Key pointing to the node where the list is stored. */ static List<Video> getVideoModelVideoList(JsonNode node, String key) { if (node.has(key)) { final ArrayNode a = (ArrayNode)node.get(key); final List<Video> l = new ArrayList<Video>(a.size()); for (int i = 0; i < a.size(); i++) { l.add(new Video((JsonNode)a.get(i))); } return l; } return new ArrayList<Video>(0); } /** * Flatten this object into a Parcel. * @param parcel the Parcel in which the object should be written. * @param flags additional flags about how the object should be written. */ @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeValue(aspect); parcel.writeValue(codec); parcel.writeValue(duration); parcel.writeValue(height); parcel.writeValue(width); } /** * Construct via parcel. */ protected Video(Parcel parcel) { aspect = parcel.readDouble(); codec = parcel.readString(); duration = parcel.readInt(); height = parcel.readInt(); width = parcel.readInt(); } /** * Generates instances of this Parcelable class from a Parcel. */ public static final Parcelable.Creator<Video> CREATOR = new Parcelable.Creator<Video>() { @Override public Video createFromParcel(Parcel parcel) { return new Video(parcel); } @Override public Video[] newArray(int n) { return new Video[n]; } }; @Override public int describeContents() { return 0; } } } /** * API Name: <tt>Video.Fields.Episode</tt> */ public interface EpisodeFields { public final String TITLE = "title"; public final String PLOT = "plot"; public final String VOTES = "votes"; public final String RATING = "rating"; public final String WRITER = "writer"; public final String FIRSTAIRED = "firstaired"; public final String PLAYCOUNT = "playcount"; public final String RUNTIME = "runtime"; public final String DIRECTOR = "director"; public final String PRODUCTIONCODE = "productioncode"; public final String SEASON = "season"; public final String EPISODE = "episode"; public final String ORIGINALTITLE = "originaltitle"; public final String SHOWTITLE = "showtitle"; public final String CAST = "cast"; public final String STREAMDETAILS = "streamdetails"; public final String LASTPLAYED = "lastplayed"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String FILE = "file"; public final String RESUME = "resume"; public final String TVSHOWID = "tvshowid"; public final String DATEADDED = "dateadded"; public final String UNIQUEID = "uniqueid"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(TITLE, PLOT, VOTES, RATING, WRITER, FIRSTAIRED, PLAYCOUNT, RUNTIME, DIRECTOR, PRODUCTIONCODE, SEASON, EPISODE, ORIGINALTITLE, SHOWTITLE, CAST, STREAMDETAILS, LASTPLAYED, FANART, THUMBNAIL, FILE, RESUME, TVSHOWID, DATEADDED, UNIQUEID, ART)); } /** * API Name: <tt>Video.Fields.Movie</tt> */ public interface MovieFields { public final String TITLE = "title"; public final String GENRE = "genre"; public final String YEAR = "year"; public final String RATING = "rating"; public final String DIRECTOR = "director"; public final String TRAILER = "trailer"; public final String TAGLINE = "tagline"; public final String PLOT = "plot"; public final String PLOTOUTLINE = "plotoutline"; public final String ORIGINALTITLE = "originaltitle"; public final String LASTPLAYED = "lastplayed"; public final String PLAYCOUNT = "playcount"; public final String WRITER = "writer"; public final String STUDIO = "studio"; public final String MPAA = "mpaa"; public final String CAST = "cast"; public final String COUNTRY = "country"; public final String IMDBNUMBER = "imdbnumber"; public final String RUNTIME = "runtime"; public final String SET = "set"; public final String SHOWLINK = "showlink"; public final String STREAMDETAILS = "streamdetails"; public final String TOP250 = "top250"; public final String VOTES = "votes"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String FILE = "file"; public final String SORTTITLE = "sorttitle"; public final String RESUME = "resume"; public final String SETID = "setid"; public final String DATEADDED = "dateadded"; public final String TAG = "tag"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(TITLE, GENRE, YEAR, RATING, DIRECTOR, TRAILER, TAGLINE, PLOT, PLOTOUTLINE, ORIGINALTITLE, LASTPLAYED, PLAYCOUNT, WRITER, STUDIO, MPAA, CAST, COUNTRY, IMDBNUMBER, RUNTIME, SET, SHOWLINK, STREAMDETAILS, TOP250, VOTES, FANART, THUMBNAIL, FILE, SORTTITLE, RESUME, SETID, DATEADDED, TAG, ART)); } /** * API Name: <tt>Video.Fields.MovieSet</tt> */ public interface MovieSetFields { public final String TITLE = "title"; public final String PLAYCOUNT = "playcount"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(TITLE, PLAYCOUNT, FANART, THUMBNAIL, ART)); } /** * API Name: <tt>Video.Fields.MusicVideo</tt> */ public interface MusicVideoFields { public final String TITLE = "title"; public final String PLAYCOUNT = "playcount"; public final String RUNTIME = "runtime"; public final String DIRECTOR = "director"; public final String STUDIO = "studio"; public final String YEAR = "year"; public final String PLOT = "plot"; public final String ALBUM = "album"; public final String ARTIST = "artist"; public final String GENRE = "genre"; public final String TRACK = "track"; public final String STREAMDETAILS = "streamdetails"; public final String LASTPLAYED = "lastplayed"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String FILE = "file"; public final String RESUME = "resume"; public final String DATEADDED = "dateadded"; public final String TAG = "tag"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(TITLE, PLAYCOUNT, RUNTIME, DIRECTOR, STUDIO, YEAR, PLOT, ALBUM, ARTIST, GENRE, TRACK, STREAMDETAILS, LASTPLAYED, FANART, THUMBNAIL, FILE, RESUME, DATEADDED, TAG, ART)); } /** * API Name: <tt>Video.Fields.Season</tt> */ public interface SeasonFields { public final String SEASON = "season"; public final String SHOWTITLE = "showtitle"; public final String PLAYCOUNT = "playcount"; public final String EPISODE = "episode"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String TVSHOWID = "tvshowid"; public final String WATCHEDEPISODES = "watchedepisodes"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(SEASON, SHOWTITLE, PLAYCOUNT, EPISODE, FANART, THUMBNAIL, TVSHOWID, WATCHEDEPISODES, ART)); } /** * API Name: <tt>Video.Fields.TVShow</tt> */ public interface TVShowFields { public final String TITLE = "title"; public final String GENRE = "genre"; public final String YEAR = "year"; public final String RATING = "rating"; public final String PLOT = "plot"; public final String STUDIO = "studio"; public final String MPAA = "mpaa"; public final String CAST = "cast"; public final String PLAYCOUNT = "playcount"; public final String EPISODE = "episode"; public final String IMDBNUMBER = "imdbnumber"; public final String PREMIERED = "premiered"; public final String VOTES = "votes"; public final String LASTPLAYED = "lastplayed"; public final String FANART = "fanart"; public final String THUMBNAIL = "thumbnail"; public final String FILE = "file"; public final String ORIGINALTITLE = "originaltitle"; public final String SORTTITLE = "sorttitle"; public final String EPISODEGUIDE = "episodeguide"; public final String SEASON = "season"; public final String WATCHEDEPISODES = "watchedepisodes"; public final String DATEADDED = "dateadded"; public final String TAG = "tag"; public final String ART = "art"; public final static Set<String> values = new HashSet<String>(Arrays.asList(TITLE, GENRE, YEAR, RATING, PLOT, STUDIO, MPAA, CAST, PLAYCOUNT, EPISODE, IMDBNUMBER, PREMIERED, VOTES, LASTPLAYED, FANART, THUMBNAIL, FILE, ORIGINALTITLE, SORTTITLE, EPISODEGUIDE, SEASON, WATCHEDEPISODES, DATEADDED, TAG, ART)); } }